دسته بندی ها
11:05 1403/12/22

کندی نمایش اطلاعات با ردیف های زیاد در انتیتی فریم ورک (EF Core)

مشخصات سوال کننده :
کاربر : hamdola     امتیاز کاربر : 121     رتبه کاربر : 12
دسته بندی : Asp.net Core Entity Framework

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 560
هوش مصنوعی

پاسخ هوش مصنوعی

برای نمایش اطلاعات با ردیف های زیاد در Entity Framework Core و بهبود عملکرد بارگذاری داده ها، می توانید از تکنیک ها و روش های زیر استفاده کنید:

  • استفاده از Paging: به جای بارگذاری تمام رکوردها، می توانید تعداد معینی از رکوردها را در هر بار درخواست بارگذاری کنید. این کار می تواند با استفاده از متدهای Skip() و Take() انجام شود.

    
    var pageNumber = 1;
    var pageSize = 100;
    var data = await context.TableName
                            .Skip((pageNumber - 1) * pageSize)
                            .Take(pageSize)
                            .ToListAsync();
            
  • استفاده از Projection: به جای بارگذاری کل رکورد، فقط داده های مورد نیاز را بارگذاری کنید. این کار می تواند در بهبود رفتار صفحه تأثیر زیادی داشته باشد.

    
    var data = await context.TableName
                            .Select(x => new { x.Field1, x.Field2 }) // فقط فیلدهای مورد نیاز
                            .ToListAsync();
            
  • استفاده از AsNoTracking: اگر نیازی به ردیابی موجودیت ها ندارید، می توانید از این متد استفاده کنید. این کار باعث کاهش بار روی حافظه و بهبود عملکرد خواهد شد.

    
    var data = await context.TableName
                            .AsNoTracking()
                            .ToListAsync();
            
  • استفاده از Caching: در صورت امکان می توانید نتایج درخواست های مکرر را در حافظه نهان ذخیره کنید.

  • بهینه سازی پایگاه داده: اطمینان حاصل کنید که پایگاه داده شما به خوبی ایندکس شده است و پرس و جوهای موثر و بهینه ای را اجرا می کند.

با استفاده از این تکنیک ها می توانید عملکرد بارگذاری داده ها را بهبود بخشید و از کندی در زمان نمایش اطلاعات جلوگیری کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : fateme 12:40 1403/12/23

کند شدن نمایش اطلاعات با حجم زیاد در Asp.net core

چند تا راه حل به شما میگم که امیدوارم به درد شما بخوره.

  • استفاده از دستور Take در انتیتی فریم ورک

راه حل اول استفاده از دستور take هست. توسط این دستور شما می تونید تعداد مشخصی از ردیف ها رو از دیتابیس فراخوانی کنید و نمایش بدید. قطعا کاربر شما در لحظه به 10 میلیون رکورد نیازی نداره. بنابراین چه لزومی هست که 10 میلیون رکورد رو واکشی کنید. شما می تونید مثلا 1000 رکورد آخر رو واکشی کنید و نمایش بدید. حالا کاربر اگر به هر رکورد دیگه ای نیاز داشته باشه با جستجو می تونه رکورد مورد نظرش رو پیدا کنه. (دقت کنید در هر بار جستجو هم حداکثر 1000 رکورد واکشی میشه و سرعت پروژه افت نمیکنه.)

var query = _context.users.ToList().Take(1000);

این راه حل بنظرم بهترین راه حل در خیلی از موارد باشه.

 

  • استفاده از قابلیت های IEnumerable و IQueryable

توی انتیتی فریم ورک دو تا دستور به نام IEnumerable و IQueryable داریم که برای واکشی اطلاعات از دیتابیس استفاده میشن. دستور IQueryable دستورات انتیتی فریم ورک رو میبره و داخل خود Sql Server اجرا میکنه و فقط نتیجه رو برمیگردونه و از این رو سرعت بهتری داره. توصیه میشه حتما این لینک رو مطالعه کنید. (تفاوت بین IEnumerable و IQueryable)

var query = _context.users.ToList().IQueryable();

 

  • استفاده از Dapper

dapper یک ORM بسیار سبک و سریع هست که اجازه میده دستورات شما به راحتی در Sql مثل یه SP اجرا بشن و سرعت بالایی رو براتون به ارمغان میارن. از این ORM میتونید برای کار با داده های خیلی بزرگ هم استفاده کنید و سرعت لود اطلاعات افزایش چشمگیری داره. بنابراین راه حل سوم شما هم استفاده از Dapper هست.

 

نکته : راه حل های تخصصی تری هم برای کار با داده های بزرگ هست ولی برای پروژه شما که آماده هم هست همین روش ها معقول تره.

ویرایش شده در پنج شنبه 23 اسفند 1403 ساعت 12:48:42
به این پاسخ امتیاز بدهید    0
امتیاز: 1637 رتبه: 2
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود